﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace changeFileAttributes
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private string sPath = "";
        private void btnKlasorSec_Click(object sender, EventArgs e)
        {
            if (fbd.ShowDialog().Equals(DialogResult.OK))
            {
                sPath = fbd.SelectedPath;
            }
        }

        private bool bDosyalar = false;
        private void cbDosyalar_CheckedChanged(object sender, EventArgs e)
        {
            if (cbDosyalar.Checked)
            {
                bDosyalar = true;
                cbDosyalar.Text = "Dosyaları Ara";
            }
            else
            {
                bDosyalar = false;
                cbDosyalar.Text = "Dizinleri Ara";
            }
        }

        private void btnAra_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            if (sPath.Length > 0)
            {
                List<string> lstResult = FileHelper.GetFilesRecursive(sPath);

                if (bDosyalar)
                {
                    listBox1.Items.AddRange(lstResult.ToArray());
                }
                else
                {
                    listBox1.Items.AddRange(FileHelper.ListDirectories.ToArray());
                    FileHelper.ListDirectories.Clear();
                }
            }
            else
            {
                btnKlasorSec_Click(sender, e);
            }
        }

        private void cbGizli_CheckedChanged(object sender, EventArgs e)
        {
            cbGizli.Text = cbGizli.Checked ? "Gizli" : "Gizli Değil";
        }

        private void cbSystem_CheckedChanged(object sender, EventArgs e)
        {
            cbSystem.Text = cbSystem.Checked ? "Sistem" : "Sistem Değil";
        }

        private void cbReadOnly_CheckedChanged(object sender, EventArgs e)
        {
            cbReadOnly.Text = cbReadOnly.Checked ? "Sadece Okunabilir" : "Sadece Okunabilir Değil";
        }

        private void btnUygula_Click(object sender, EventArgs e)
        {
            foreach (var item in listBox1.SelectedItems)
            {
                FileHelper.ChangeAttributes(item.ToString(), new FileAttribute[]
                                                                 {
                                                                     new AttHidden(cbGizli.Checked),
                                                                     new AttArchive(cbArsiv.Checked),
                                                                     new AttSystem(cbSystem.Checked),
                                                                     new AttReadOnly(cbReadOnly.Checked)
                                                                 }
                    );
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listBox1.SelectedItem==null)
            {
                return;
            }

            string sFilePath = listBox1.SelectedItem.ToString();
            
            // check whether a file is read only
            lblOznitelikler.Text = ((File.GetAttributes(sFilePath) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)?"Sadece Okunabilir":"Sadece Okunabilir DEĞİL";

            lblOznitelikler.Text += Environment.NewLine;

            // check whether a file is hidden
            lblOznitelikler.Text += ((File.GetAttributes(sFilePath) & FileAttributes.Hidden) == FileAttributes.Hidden)?"Gizli":"Gizli DEĞİL";

            lblOznitelikler.Text += Environment.NewLine;
            
            // check whether a file has archive attribute
            lblOznitelikler.Text += ((File.GetAttributes(sFilePath) & FileAttributes.Archive) == FileAttributes.Archive)?"Arşiv":"Arşiv DEĞİL";

            lblOznitelikler.Text += Environment.NewLine;

            // check whether a file is system file
            lblOznitelikler.Text += ((File.GetAttributes(sFilePath) & FileAttributes.System) == FileAttributes.System)?"Sistem Dosyası":"Sistem Dosyası DEĞİL";

            
        }

    }
}
